/*
 * Created on 24/06/2005
 *
 */
package com.master.bd.calculo_frete;

import java.sql.*;

import com.master.ed.*;
import com.master.root.*;
import com.master.util.*;
import com.master.util.bd.*;

/**
 * @author Tiago
 *
 */
public class Calcula_Frete_Standard extends Calcula_Frete{


    public Calcula_Frete_Standard(ExecutaSQL executasql) {
        super(executasql);
        // // ("Calcula_Frete_Standard 1");
    }


    public void calcula(Calcula_FreteED ed)
    throws Excecoes{


            Localiza_Tabela = new Localiza_Tabela(this.executasql);
            Tabela_FreteBean tabelaFreteED = new Tabela_FreteBean();

            ed.setLocalizado("N");
            ed.setDM_Tem_Cidade("S");
            ed.setDM_Tem_Peso("N");
            ed.setDM_Tem_Modal("S");
            ed.setDM_Tem_Validade("N");
            ed.setDM_Tem_Vigencia("N");
            ed.setDM_Tem_Empresa("N");
            ed.setDM_Tem_Regiao_Estado("S");
            ed.setDM_Tem_Estado("S");
            ed.setDM_Tem_Subregiao("N");
            ed.setDM_Tem_Regiao_Pais("N");
            ed.setDM_Tem_Pais("S");
            ed.setDM_Tabela_Reversa("N");
            ed.setDM_Tem_Tabela_Unidade("S");
            ed.setDM_Tem_Produto("S");

            ed.setDM_Percurso_Busca("Origem_Destino");


                // // ("Localiza_Tabela 1");

                tabelaFreteED = Localiza_Tabela.escolheTabela(ed);


                if ("S".equals(tabelaFreteED.getDM_Localizado())) {
                  // // ("achou tabela- oid >> " + tabelaFreteED.getOID());
                  // //  ("getDM_Classificacao_Produto >> " + ed.getDM_Classificacao_Produto ());

                    if (!"Geral".equals(ed.getDM_Classificacao_Produto())){
                        Calcula_Frete_Especial = new Calcula_Frete_Especial (this.executasql);
                        if ("Espec001".equals (ed.getDM_Classificacao_Produto ())) 
                          Calcula_Frete_Especial.calculaEspecial001 (tabelaFreteED , ed);
                        if ("Espec010".equals (ed.getDM_Classificacao_Produto ())) 
                          Calcula_Frete_Especial.calculaEspecial010 (tabelaFreteED , ed);
                        if ("Espec020".equals (ed.getDM_Classificacao_Produto ())) 
                          Calcula_Frete_Especial.calculaEspecial020 (tabelaFreteED , ed);
                        if ("Espec070".equals (ed.getDM_Classificacao_Produto ())) 
                          Calcula_Frete_Especial.calculaEspecial070 (tabelaFreteED , ed);
                        if ("Espec080".equals (ed.getDM_Classificacao_Produto ())) 
                          Calcula_Frete_Especial.calculaEspecial080 (tabelaFreteED , ed);
                        if ("Espec140".equals (ed.getDM_Classificacao_Produto ())) 
                          Calcula_Frete_Especial.calculaEspecial140 (tabelaFreteED , ed);
                        if ("Espec180".equals (ed.getDM_Classificacao_Produto ())) 
                          Calcula_Frete_Especial.calculaEspecial180 (tabelaFreteED , ed);
                        if ("Espec200".equals (ed.getDM_Classificacao_Produto ())) 
                          Calcula_Frete_Especial.calculaEspecial200 (tabelaFreteED , ed);
                        if ("Espec210".equals (ed.getDM_Classificacao_Produto ())) 
                          Calcula_Frete_Especial.calculaEspecial210 (tabelaFreteED , ed);
                        if ("Espec240".equals (ed.getDM_Classificacao_Produto ())) 
                          Calcula_Frete_Especial.calculaEspecial240 (tabelaFreteED , ed);
                      
                    }else{
                      this.calculaFretePeso (tabelaFreteED , ed);
                    }

                    this.calculaFreteValor (tabelaFreteED , ed);

                    this.calculaTaxaColeta (tabelaFreteED , ed);

                    if (!"I".equals (tabelaFreteED.getDM_Tipo_Localizacao_Destino ())) {
                      this.calculaTaxaEntrega (tabelaFreteED , ed);
                    }
                    else {
                      this.calculaTaxaRedespacho (tabelaFreteED , ed);
                    }

                    // // ("calculou tudo ");

                }
    }

    protected void calculaFretePeso( Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed) throws Excecoes {
            // --------------------FRETE PESO--------------------------------------------------

            // // ("achou tabela- getNR_Peso >> " + ed.getNR_Peso_Tabela());

            Tipo_Movimento = "FP";
            VL_Movimento_Frete=0;

            if (ed.getNR_Peso() < 26){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Ate25() * ed.getNR_Peso_Tabela();
            }else if (ed.getNR_Peso() < 51){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Ate50() * ed.getNR_Peso_Tabela();
            }else if (ed.getNR_Peso() < 301){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Ate300() * ed.getNR_Peso_Tabela();
            }else if (ed.getNR_Peso() < 501){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Ate500() * ed.getNR_Peso_Tabela();
            }else if (ed.getNR_Peso() < 1001){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Ate1000() * ed.getNR_Peso_Tabela();
            }
            if (VL_Movimento_Frete == 0.0 || ed.getNR_Peso_Cubado() > 1000){
                VL_Movimento_Frete = (tabelaFreteED.getVL_C_Acima1000() * ed.getNR_Peso_Tabela());
            }

            // // ("achou tabela- getNR_Peso_TX_Minima >> " + ed.getNR_Peso_TX_Minima());

            if (VL_Movimento_Frete < tabelaFreteED.getVL_C_Taxa_Minima() ||
                ed.getNR_Peso() < ed.getNR_Peso_TX_Minima()){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Taxa_Minima();
            }

            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);
    }

    protected void calculaFreteValor(Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed)  throws Excecoes{
        // --------------------AD VALOREM--------------------------------------------------
            Tipo_Movimento = "AV";
            VL_Movimento_Frete = (ed.getVL_Nota_Fiscal() * tabelaFreteED.getPE_C_Ad_Valorem() / 100);

            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);

    }

    protected void calculaTaxaColeta(Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed)  throws Excecoes{
        // --------------------TX COLETA--------------------------------------------------
            Tipo_Movimento = "TXC";
            VL_Movimento_Frete=tabelaFreteED.getVL_TX_Coleta();

            if (ed.getNR_Peso() >tabelaFreteED.getNR_Peso_TX_Coleta()){
              VL_Movimento_Frete += tabelaFreteED.getVL_TX_Exc_Coleta() * (ed.getNR_Peso()-tabelaFreteED.getNR_Peso_TX_Coleta());
            }
            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);
    }

    protected void calculaTaxaEntrega(Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed)  throws Excecoes{
        // --------------------TX ENTREGA--------------------------------------------------
            Tipo_Movimento = "TXE";
            VL_Movimento_Frete=tabelaFreteED.getVL_TX_Entrega();

            if (ed.getNR_Peso() >tabelaFreteED.getNR_Peso_TX_Entrega()){
              VL_Movimento_Frete += tabelaFreteED.getVL_TX_Exc_Entrega() * (ed.getNR_Peso()-tabelaFreteED.getNR_Peso_TX_Entrega());
            }
            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);
    }

    protected void calculaTaxaRedespacho(Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed)  throws Excecoes{
        // --------------------TX Redespacho--------------------------------------------------
            Tipo_Movimento = "TXR";
            VL_Movimento_Frete=tabelaFreteED.getVL_TX_Redespacho();

            if (ed.getNR_Peso() >tabelaFreteED.getNR_Peso_TX_Redespacho()){
              VL_Movimento_Frete += tabelaFreteED.getVL_Excesso_TX_Redespacho() * (ed.getNR_Peso()-tabelaFreteED.getNR_Peso_TX_Redespacho());
            }
            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);
    }


}
